/**
 * @author lscl
 * @version 1.0
 * @intro:
 */
public class Demo16_无符号右位移运算 {
    public static void main(String[] args) {

        // 由于无符号右移都是在左边补0,因此对于正数而言和有符号位移是一样的,都是: 无符号右位移N,就是除以2^N
        // 2 / 2^1
        System.out.println(2 >>> 1);      // 2 / 2 = 1

        // 8 / 2^2
        System.out.println(8 >>> 2);      // 8 / 4 = 2

        System.out.println("--------------------");


        // 对于负数而言,在左边补0将会把负数变为了正数,因此无符号右移会出现非常大的int数

        // 11111111 11111111 11111111 11111110 ---> 01111111 11111111 11111111 11111111(变为正数了)
        System.out.println(-2 >>> 1);      // 2147483647

        // 11111111 11111111 11111111 11111111 ---> 01111111 11111111 11111111 11111111(变为正数了)
        System.out.println(-1 >>> 1);      // 1073741823

        // 11111111 11111111 11111111 11111110 ---> 00111111 11111111 11111111 11111110(变为正数了)
        System.out.println(-2 >>> 2);      // 1073741823
    }
}
